package exprarbre;

import java.util.HashMap;
import progarbre.ASAProg;

public class ASAIdent extends ASAExpr {

    private String identifiant;
    private ASAExpr valeur;
    private int pointeur = -1;

    public ASAIdent(String identifiant) {
        this.identifiant = identifiant.toUpperCase();
    }

    public ASAIdent(String identifiant, ASAExpr valeur) {
        this(identifiant);
        this.valeur = valeur;
    }

    public Integer getValeur(HashMap<String, Integer> affectation) {
        if (valeur != null) {
            return valeur.evalue(affectation);
        }
        return null;
    }

    public void setPointeur(int p) {
        pointeur = p;
    }

    @Override
    public ASAExpr getExpr2() {
        return valeur;
    }

    public void setValeurPointeur(int valeur) {
        ASAProg.set(pointeur, valeur);
    }

    public void setValeur(ASAExpr valeur) {
        this.valeur = valeur;
    }

    @Override
    public String getLabelExplorateur() {
        return identifiant;
    }

    @Override
    public void setPointeur(HashMap<String, Integer> affectation) {
        for (String id : affectation.keySet()) {
            if (identifiant.equals(id)) {
                pointeur = affectation.get(id);
            }
        }
    }

    @Override
    public int evalue() {
        if (ASAProg.get(pointeur) == null) {
            throw new RuntimeException("Variable " + identifiant + " non Initialisé ou non déclaré");
        }
        return ASAProg.get(pointeur);
    }
}